Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET]Invio file tramite i sockets
Forum - C# / VB.NET - [VB.NET]Invio file tramite i sockets

Avatar
Hackaos (Normal User)
Rookie


Messaggi: 24
Iscritto: 19/06/2011

Segnala al moderatore
Postato alle 17:24
Lunedì, 01/04/2013
Buongiorno,
studiando le guide sui sockets di questo sito, girovagando un po su google e leggendo le varie domande degli utenti, ho capito come funzionano questi sockets.
Riesco senza problemi ad inviare file in locale, ma sul remoto ho qualche problema...

per inviare uso questo codice ( ricavato dalla guida sui sockets):
Codice sorgente - presumibilmente VB.NET

  1. Dim Reader As New IO.FileStream(filename, IO.FileMode.Open)
  2.         Dim Size As Int64 = FileLen(filename)
  3.         Dim Bytes(4095) As Byte
  4.         If Size > 4096 Then
  5.             For Block As Int64 = 0 To Size Step 4096
  6.                 If flusso.CanWrite Then
  7.                     If Size - Block >= 4096 Then
  8.                         Reader.Read(Bytes, 0, 4096)
  9.                         flusso.Write(Bytes, 0, 4096)
  10.                     Else
  11.                         Reader.Read(Bytes, 0, Size - Block)
  12.                         flusso.Write(Bytes, 0, Size - Block)
  13.                     End If
  14.                 End if
  15.             Next
  16.         Else
  17.             Reader.Read(Bytes, 0, Size)
  18.             flusso.Write(Bytes, 0, Size)
  19.         End If
  20.         Application.DoEvents()
  21.         Reader.Close()
  22.         send("END")
  23.     End Sub



Ricezione file:

Codice sorgente - presumibilmente VB.NET

  1. prgProgress.Maximum = 100
  2.                 prgProgress.Minimum = 0
  3.                 Dim Stream As New IO.FileStream(FileName, IO.FileMode.Create)
  4.                 aggiornaStato("File in arrivo...")
  5.                 Dim Index As Int64 = 0
  6.                 Application.DoEvents()
  7.                 Do
  8.                     If Client.Available > 0 Then
  9.                         tempo.Start()
  10.                         Dim Bytes(Client.Available - 1) As Byte
  11.                         Dim text As String = ASCII.GetString(Bytes)
  12.                         If text.Contains("END") Or Index >= FileSize Then
  13.                             Exit Do
  14.                         End If
  15.                         flusso(TextBox2.Text).Read(Bytes, 0, Bytes.Length)
  16.                         Stream.Write(Bytes, 0, Bytes.Length)
  17.                         Index += 4096
  18.                         prgProgress.Value = (Index * 100 / FileSize)
  19.                     End If
  20.                 Loop
  21.                 aggiornaStato("File ricevuto...")
  22.                 Stream.Close()
  23.                 Application.doevents()



Ripeto che in locale va tutto bene, i file sono sani e funzionanti; ma il problema si pone in remoto... i file inviati risultano danneggiati parzialmente... per esempio le immagini sono visibili parzialmente e infatti confrontando i byte delll'immagine inviata con quelli della ricevuta si nota subito come molti byte sono sostituiti da spazi vuoti!! come se parte dei byte si perdessero strada facendo...

Non capisco il perche di tutto ciò, quindi mi rivolgo a voi :) Attendo con anzia una vostra risposta

Saluti e una buona pasqua,

Hackaos

Ultima modifica effettuata da Hackaos il 02/04/2013 alle 15:23
PM Quote
Avatar
Saik (Normal User)
Pro


Messaggi: 117
Iscritto: 07/08/2011

Segnala al moderatore
Postato alle 21:40
Martedì, 02/04/2013
per remoto cosa intendi? due computer sulla stessa lan o collegati ad internet? comunque prova ad inserire un sistema di verifica all'interno dei codici per ogni blocco inviato cosi' dovrebbe essere piu' facile capire cosa non va :D

PM Quote
Avatar
Hackaos (Normal User)
Rookie


Messaggi: 24
Iscritto: 19/06/2011

Segnala al moderatore
Postato alle 22:54
Martedì, 02/04/2013
Ho provato sia in lan sia con 2 pc su internet.
Sistema di verifica dici... mmm... qualche suggerimento?

PM Quote
Avatar
Saik (Normal User)
Pro


Messaggi: 117
Iscritto: 07/08/2011

Segnala al moderatore
Postato alle 15:43
Giovedì, 04/04/2013
Beh potresti inserire delle msgbox che ti aiutino a controllare se il pacchetto è stato ricevuto per intero.
p.s:Se provi a inviare il file senza spezzettarlo in pacchetti ti da lo stesso errore?

PM Quote
Avatar
Hackaos (Normal User)
Rookie


Messaggi: 24
Iscritto: 19/06/2011

Segnala al moderatore
Postato alle 21:11
Giovedì, 04/04/2013
No no tutto risolto :) il codice va perfettamente, il problema stava da tutt'altra parte.

Comunque ti ringrazio ugualmente per aver risposto alla domanda :)

PM Quote
Avatar
Saik (Normal User)
Pro


Messaggi: 117
Iscritto: 07/08/2011

Segnala al moderatore
Postato alle 22:09
Giovedì, 04/04/2013
Di niente :D

PM Quote